{Formulario que contiene el explorador de solución

  Copyright (C) 2010 Jorge Turiel <contact>

  This source is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free
  Software Foundation; either version 2 of the License, or (at your option)
  any later version.

  This code is distributed in the hope that it will be useful, but WITHOUT ANY
  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
  details.

  A copy of the GNU General Public License is available on the World Wide Web
  at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing
  to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
  MA 02111-1307, USA.
}
unit uExploraSolucion;

{$mode objfpc}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  ComCtrls, Menus, uSolucion;

type

  { TfrExploradorSolucion }

  TfrExploradorSolucion = class (TForm )
    ImageList1: TImageList;
    MenuItem1: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem3: TMenuItem;
    mnAbrirSolucion: TMenuItem;
    mnProyectoActual: TMenuItem;
    mnGuardaProyecto: TMenuItem;
    mnGuardaProyectoComo: TMenuItem;
    mnNuevoFichero: TMenuItem;
    mnAbrirArchivo: TMenuItem;
    mnAbrirProyecto: TMenuItem;
    mnProyectoCrear: TMenuItem;
    PopMenuExplorador: TPopupMenu;
    TreeView1: TTreeView;
    procedure FormClose (Sender: TObject; var CloseAction: TCloseAction );
    procedure FormCreate (Sender: TObject );
    procedure mnAbrirArchivoClick (Sender: TObject );
    procedure mnAbrirProyectoClick(Sender: TObject);
    procedure mnGuardaProyectoClick(Sender: TObject);
    procedure mnGuardaProyectoComoClick(Sender: TObject);
    procedure mnNuevoFicheroClick (Sender: TObject );
    procedure mnProyectoActualClick (Sender: TObject );
    procedure mnProyectoCrearClick (Sender: TObject );
    procedure PopMenuExploradorPopup (Sender: TObject );
    procedure TreeView1Click (Sender: TObject );
    procedure TreeView1CustomDrawItem (Sender: TCustomTreeView;
      Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean );
    procedure TreeView1DblClick (Sender: TObject );


  private
    { private declarations }
    NodoRaiz : TTreeNode;
    procedure CambiarProyectoActual;
  public
    { public declarations }
//    Procedure ActualizaExplorador;

  end; 

var
  frExploradorSolucion: TfrExploradorSolucion;

implementation

{ TfrExploradorSolucion }
Uses uComun,uPedirNombre,uVentanas,uEditorComun,Umain;

procedure TfrExploradorSolucion.FormCreate (Sender: TObject );
begin
  //Top := LimiteSuperior+30;
  //Left := 0;
  //Todo: Deberia trabajar con WorkAreaTop
With ExploradorPos do
  Begin
   Top:= Arriba;
   Left:= Izquierda;
   Width := Ancho;
   Height :=  Alto;
  end;
 //height := Screen.Height-50 - Top;

  NodoRaiz := TreeView1.Items.Add(Nil,NombreSolucion);

  //TreeView1.Items.AddChild(Hijo,'Fichero');
  NodoRaiz.ImageIndex:= 2;
  NodoRaiz.SelectedIndex:=2;

end;

procedure TfrExploradorSolucion.FormClose (Sender: TObject;
  var CloseAction: TCloseAction );
begin
  With ExploradorPos do
  Begin
   Top := Arriba;
   Left := Izquierda;
   Ancho := width;
   Alto := height;
  end;
end;

procedure TfrExploradorSolucion.mnAbrirArchivoClick (Sender: TObject );
begin

end;

procedure TfrExploradorSolucion.mnAbrirProyectoClick(Sender: TObject);
begin

end;

procedure TfrExploradorSolucion.mnGuardaProyectoClick(Sender: TObject);
begin

end;

procedure TfrExploradorSolucion.mnGuardaProyectoComoClick(Sender: TObject);
begin

end;

procedure TfrExploradorSolucion.mnNuevoFicheroClick (Sender: TObject );
Var
 Ok : Boolean;
 Nombre : AnsiString;
 NodoTemp,
 NodoPadre : TTreeNode;
 NodoActual : TTreeNode;
 stProyecto : AnsiString;
 Ruta : AnsiString;
begin
   Nombre := '';
   Ruta :='';
   Ok := PedirTexto (frExploradorSolucion,'Añadir un archivo',
                    'Introduce el nombre del archivo',Nombre);
   If Not Ok Then
   Begin
     Exit;
   end;

   //Nodo Actual
   NodoActual := TreeView1.Selected;
   If NodoActual.HasChildren = True  Then
   Begin
     //Si tiene hijos este es el nombre del proyecto  y el nodo padre
     NodoPadre := TreeView1.Selected;
     stProyecto := NodoActual.Text;
   end
   Else
   Begin
    //Sino puede ser un proyecto sin archivos, entonces su padre sera el nodo raiz
    NodoTemp := NodoActual.Parent;
    If  NodoTemp.Level = 0  Then
    Begin
     //    ShowMessage ('Si') el nodo padre en el raiz
     NodoPadre := TreeView1.Selected;
     stProyecto := NodoActual.Text;
    end
    else
     Begin
      //Hay que buscar a su padre
      NodoPadre := NodoTemp;
      StProyecto := NodoPadre.Text;
     end;


   end;

  //ShowMessage (stProyecto);
  //Comprobar que en este proyecto no exista un fichero con ese nombre
   //IF AddArchivo (stProyecto,Nombre,Ruta,True, nTabSheet+1) Then
   //Begin
   //  NodoActual := TreeView1.Items.AddChild(NodoPAdre,Nombre);
   //  NodoActual.ImageIndex:=1;
   //  NodoActual.SelectedIndex:=1;
   //  CrearEditor (Nombre,'');
   //end;
end;

procedure TfrExploradorSolucion.mnProyectoActualClick (Sender: TObject );
begin
  CambiarProyectoActual;
end;

procedure TfrExploradorSolucion.mnProyectoCrearClick (Sender: TObject );

begin

end;

procedure TfrExploradorSolucion.PopMenuExploradorPopup (Sender: TObject );
begin
  If (TreeView1.Selected = nil) Or (TreeView1.Selected = NodoRaiz) Then
  Begin
    //Esta seleccionado el nodo raiz o ninguno
     mnNuevoFichero.Enabled:= False;
     mnAbrirArchivo.Enabled:=False;
     mnProyectoCrear.Enabled:= True;
     mnAbrirProyecto.Enabled:=True;
     mnGuardaProyecto.Enabled:= ProyectoActual <> '';
     mnGuardaProyectoComo.Enabled:= ProyectoActual<> '';
     mnProyectoActual.Enabled:=False;
  end
  ELse
  Begin
   // Esta seleccionado un nodo hijo
     mnNuevoFichero.Enabled:= True;
     mnAbrirArchivo.Enabled:=True;
     mnProyectoCrear.Enabled:= False;
     mnAbrirProyecto.Enabled:=False;
     mnGuardaProyecto.Enabled:=False;
     mnGuardaProyectoComo.Enabled:=False;
     mnProyectoActual.Enabled := (TreeView1.Selected.HasChildren = True);
     mnProyectoActual.Checked:= mnProyectoActual.Enabled and
                                (TreeView1.Selected.Text = ProyectoActual);


  end;
end;

procedure TfrExploradorSolucion.TreeView1Click (Sender: TObject );
Var
 NodoActual : TTreeNode;
 NodoPadre : TTreeNode;
 id : integer;
begin
  If TreeView1.Selected = nil Then Exit;
  NodoActual := TreeView1.Selected;
  //Si tiene hijos NO se ha seleccionado un fichero
  If NodoActual.HasChildren Then Exit;

  //Obtenemos el padre
  NodoPadre := NodoActual.Parent;

  If NodoPadre = nil Then Exit; //Sino tiene padre...

  id :=  Solucion.idTagArchivo (NodoPadre.Text,NodoActual.Text);

   If id > 0 Then
   Begin
   frMain.frEditor.MuestraTab (iD);
   end;



end;
//Cuando se pintan los elementos del TreeView, se pone en negrita el proyecto
//actual.
procedure TfrExploradorSolucion.TreeView1CustomDrawItem (
  Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState;
  var DefaultDraw: Boolean );
begin
   If (Node.Text = ProyectoActual) and (Node.HasChildren) Then
   Begin
      TreeView1.Font.Style := [fsbold];
   end
   Else
   Begin

      TreeView1.Font.Style := [];
   end;
   DefaultDraw := True;

end;
//Cuando
procedure TfrExploradorSolucion.TreeView1DblClick (Sender: TObject );
begin
 CambiarProyectoActual;
end;
Procedure TfrExploradorSolucion.CambiarProyectoActual;
Var
 Nodo : TTreeNode;
Begin
  Nodo := TreeView1.Selected;
 If Nodo = nil Then Exit;

 IF (Nodo.HasChildren) and (Nodo.Parent <> nil) Then
 Begin
    ProyectoActual := Nodo.Text;
    TreeView1.Repaint;
    Nodo.Expand(True);
 end;
end;

//procedure TfrExploradorSolucion.ActualizaExplorador;
//var
//  Nombre: String;
//  I: Integer;
//  NodoHijo: TTreeNode;
//  Registro: TProyecto;
//  J: Integer;
//  Ficheros: TFichero;
//begin
//  If Solucion = nil Then
//  Begin
//    Nombre := SinNombre;
//  end
//  Else
//  Begin
//    Nombre := Solucion.nombre;
//  end;
//  With frExploradorSolucion do
//  Begin
//   //TreeView1.Items.Clear;
//   TreeView1.Items.Delete(NodoRaiz);
//    NodoRaiz := TreeView1.Items.AddChild(Nil,Nombre);
//    NodoRaiz.ImageIndex:=2;
//    NodoRaiz.SelectedIndex:=2;
//  end;
//
//  For I := 0 To Solucion.Contar-1 do
//  Begin
//      Registro := TProyecto.Create('','',-1);
//      Registro := Solucion.Proyectos[i];
//      NodoHijo := frExploradorSolucion.TreeView1.Items.AddChild(NodoRaiz,Registro.Nombre);
//      For J := 0 To Registro.Contar-1 do
//      Begin
//          Ficheros := Registro.Ficheros[j];
//          frExploradorSolucion.TreeView1.Items.AddChild(NodoHijo,Ficheros.Nombre);
//      end;
//      Registro := nil;
//  end;
//  If Registro  <> nil Then
//     Registro := nil;
//end;

initialization
  {$I uexplorasolucion.lrs}

end.

